package com.hxt.framework.utils;

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;

public class IpUtil {

	/*
	 * 验证IP是否属于某个IP段 ipSection IP段（以'-'分隔） ip 所验证的IP号码
	 */

	public static boolean ipExistsInRange(String ip, String ipSection) {

		ipSection = ipSection.trim();

		ip = ip.trim();

		int idx = ipSection.indexOf('-');

		String beginIP = ipSection.substring(0, idx);

		String endIP = ipSection.substring(idx + 1);

		return getIp2long(beginIP) <= getIp2long(ip)
				&& getIp2long(ip) <= getIp2long(endIP);

	}

	public static long getIp2long(String ip) {

		ip = ip.trim();

		String[] ips = ip.split("\\.");

		long ip2long = 0L;

		for (int i = 0; i < 4; ++i) {

			ip2long = ip2long << 8 | Integer.parseInt(ips[i]);

		}

		return ip2long;

	}

	public static long getIp2long2(String ip) {

		ip = ip.trim();

		String[] ips = ip.split("\\.");

		long ip1 = Integer.parseInt(ips[0]);

		long ip2 = Integer.parseInt(ips[1]);

		long ip3 = Integer.parseInt(ips[2]);

		long ip4 = Integer.parseInt(ips[3]);

		long ip2long = 1L * ip1 * 256 * 256 * 256 + ip2 * 256 * 256 + ip3 * 256
				+ ip4;

		return ip2long;

	}

	public static String getServerMacAddress() {
		StringBuffer sbr = new StringBuffer();
		try {
			Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface
					.getNetworkInterfaces();
			byte[] mac = null;
			while (allNetInterfaces.hasMoreElements()) {
				NetworkInterface netInterface = (NetworkInterface) allNetInterfaces
						.nextElement();
				if (netInterface.isLoopback() || netInterface.isVirtual()
						|| !netInterface.isUp()) {
					continue;
				} else {
					mac = netInterface.getHardwareAddress();
					if (mac != null) {
						StringBuilder sb = new StringBuilder();
						for (int i = 0; i < mac.length; i++) {
							sb.append(String.format("%02X%s", mac[i],
									(i < mac.length - 1) ? "-" : ""));
						}
						if (sb.length() > 0) {
							//return sb.toString();
							sbr.append(sb.toString()).append("#");
						}
					}
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		if(sbr.length() > 0){
			return sbr.substring(0, sbr.length() - 1);
		}
		
		return "";
	}

	public static String getServerIpAddress() {
		StringBuffer sb = new StringBuffer();
		try {
			Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface
					.getNetworkInterfaces();
			InetAddress ip = null;
			while (allNetInterfaces.hasMoreElements()) {
				NetworkInterface netInterface = (NetworkInterface) allNetInterfaces
						.nextElement();
				if (netInterface.isLoopback() || netInterface.isVirtual()
						|| !netInterface.isUp()) {
					continue;
				} else {
					Enumeration<InetAddress> addresses = netInterface
							.getInetAddresses();
					while (addresses.hasMoreElements()) {
						ip = addresses.nextElement();
						if (ip != null && ip instanceof Inet4Address) {
							//return ip.getHostAddress();
							sb.append(ip.getHostAddress()).append(",");
						}
					}
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			return "";
		}
		if(sb.length() > 0){
			return sb.substring(0, sb.length() - 1);
		}
		
		return "";
	}

	public static void main(String[] args) {

		// 10.10.10.116 是否属于固定格式的IP段10.10.1.00-10.10.255.255
		// *,172.23.3.*,172.23.6.*,172.23.16.*,172.23.2.*,127.0.0.1,172.*,*.67
		// String ip = "127.0.0.1";
		//
		// String ipSection = "127.0.0.1-127.0.0.1";
		//
		// boolean exists = ipExistsInRange(ip, ipSection);
		//
		// System.out.println(exists);

		System.out.println(getServerIpAddress());
		System.out.println(getServerMacAddress());

		// System.out.println(getIp2long(ip));
		//
		// System.out.println(getIp2long2(ip));

	}

}
